package FileDemo;

import java.io.File;
import java.io.IOException;

/**
 * @Author: ylc
 * @Description:File获取功能的方法
 * @Date Created in 2022-04-23 15:11
 */
public class FileDemo3 {

    public static void main(String[] args) throws IOException{

        System.out.println("------------");
        show07();
    }
    /*
        String getParent() 返回 File 对象的父目录文件路径
        String getName() 返回 FIle 对象的纯文件名称
        String getPath() 返回 File 对象的文件路径
        String getAbsolutePath() 返回 File 对象的绝对路径
        String getCanonicalPath() 返回 File 对象的修饰过的绝对路径
     */
    private static void show01() throws IOException {
        File file = new File("" + "..\\hello-world.txt"); // 并不要求该文件真实存在
        System.out.println(file.getParent());
        System.out.println(file.getName());
        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
    }
    /*
        boolean exists() 判断 File 对象描述的文件是否真实存在
        boolean isDirectory() 判断 File 对象代表的文件是否是一个目录
        boolean isFile() 判断 File 对象代表的文件是否是一个普通文件
        boolean createNewFile() 根据 File 对象，自动创建一个空文件。成功创建后返回 true
     */
    private static void show02() throws IOException{
        File file = new File("hello-world.txt"); // 要求该文件不存在，才能看到相同的现象
        System.out.println(file.exists());  //false
        System.out.println(file.isDirectory());//false
        System.out.println(file.isFile());  //false
        System.out.println(file.createNewFile());//true

        System.out.println(file.exists());//true
        System.out.println(file.isDirectory());//false
        System.out.println(file.isFile());//true
        System.out.println(file.createNewFile());//false
    }
    /*
        boolean delete() 根据 File 对象，删除该文件。成功删除后返回 true
    */
    private static void show03() throws IOException {
        File file = new File("some-file.txt"); // 要求该文件不存在，才能看到相同的现象
        System.out.println(file.exists());
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        System.out.println(file.delete());
        System.out.println(file.exists());
    }
    /*
    void deleteOnExit() 根据 File 对象，标注文件将被删除，删除动作会到JVM 运行结束时才会进行
     */
    private static void show04() throws IOException {
        File file = new File("some-file.txt"); // 要求该文件不存在，才能看到相同的现象
        System.out.println(file.exists());
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        file.deleteOnExit();
        System.out.println(file.exists());
    }
    /*
        boolean mkdir() 创建 File 对象代表的目录
     */
    private static void show05(){
        File dir = new File("some-dir"); // 要求该目录不存在，才能看到相同的现象
        File dir2 = new File("some-parent\\some-dir"); // 要求该目录不存在，才能看到相同的现象
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
        System.out.println(dir.mkdir());
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
    }
    /*
        mkdir() 的时候，如果中间目录不存在，则无法创建成功;
        mkdirs() 可以解决这个问题
     */
    private static void show06(){
        File dir = new File("some-parent\\some-dir"); // 要求该目录不存在，才能看到相同的现象
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
        System.out.println(dir.mkdir());
        //System.out.println(dir.mkdirs());
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
    }
    /*
        观察文件重命名
        boolean renameTo(File dest)进行文件改名，也可以视为我们平时的剪切、粘贴操作
     */
    private static void show07(){
        File file = new File("Study04\\dest.txt"); // 要求 a.txt 得存在，可以是普通文件，可以是目录
        File dest = new File("Study04\\a.txt");  // 要求 dest.txt 不存在
/*        System.out.println(file.exists());
        System.out.println(dest.exists());

        System.out.println(file.exists());
        System.out.println(dest.exists());*/
        System.out.println(file.renameTo(dest));
    }
/*
    File类遍历(文件夹)目录功能
        - public String[] list() ：返回一个String数组，表示该File目录中的所有子文件或目录。
        - public File[] listFiles() ：返回一个File数组，表示该File目录中的所有的子文件或目录。

    注意:
        list方法和listFiles方法遍历的是构造方法中给出的目录
        如果构造方法中给出的目录的路径不存在,会抛出空指针异常
        如果构造方法中给出的路径不是一个目录,也会抛出空指针异常
 */



}
